package homework.api01.apitest02;

public class StringDemo {
    public static void main(String[] args) {
        String s1 = "123abc";//字面量创建的字符串第一次会缓存在常量池中
        String s2 = "123abc";//复用常量池中的s1对象
        String s3 = "123abc";//复用
        System.out.println(s1==s2);//true
        System.out.println(s3==s2);//true

        s1 = s1+"!";
        System.out.println(s1==s2);//false 字符串是不可变对象 不能修改 所以会创建一个新的对象

        String s = "123";
        String s4 = s+"abc";
        System.out.println(s4==s2);//编译器不做操作 会创建新的对象

        String s5 = "123"+"abc";
        System.out.println(s5==s2);//true 触发预计算功能 字面量相加会触发 所以复用常量池中缓存的对象


        String s6 = new String("123abc");
        System.out.println(s6==s2);//false 只要new就会创建一个对象

        String s7 = "123abc";
        String s8 = new String("123abc");
        System.out.println(s7==s8);//false
        System.out.println(s7.equals(s8));//true
    }
}
